package helpers.grupo.configuracion;

import cliente.pagina.*;
import comun.constantes.*;
import server.aula.ControlAula;
import server.grupo.*;
import server.grupo.configuracion.general.ControlConfiguracionGralHome;
import persistencia.dominio.*;
import java.util.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */

public class HelperEstructuraConfiguracion extends HelperConfiguracion {
	
	public Vector grupos_configurando = null;
	
	public HelperEstructuraConfiguracion(Pagina pagina) {
		super(pagina);
	}
	
	
	/**Metodo que me va generando los HTML propios del recurso cuando configura varios grupos, funciona tipo mediador* *
	 * @throws Exception */
	public String getHTMLConfiguracionDeGrupos() throws Exception{
		
		String html = "";
		super.configuracionDeQuien = this.pagina.getParameter(PARAMETROS_PAGINAS.CONFIGURACION_DE_QUIEN);
		html += this.getHTMLFormulario("Configuraci&oacute;n de los Grupos");
		super.refrescando = this.estamosRefrescando();
		
		html += super.getHTMLGruposDeLaConfiguracion(this.grupos_configurando);		
		
		html += this.getHTMLPrincipalEnFormatoTabla("Estos grupos permiten alumnos intergrupos");
		
		html += "\t    </fieldset>\n";
		html += "\t  </form>\n";
		html += "\t</div>\n";//configuracionGrupos
		return html;
	}
	
	/**Metodo que me va generando los HTML propios del recurso cuando configura un grupo, funciona tipo mediador* *
	 * @throws Exception */
	public String getHTMLConfiguracionDeUnGrupo() throws Exception{
		
		String html = "";
		
		super.configuracionDeQuien = this.pagina.getParameter(PARAMETROS_PAGINAS.CONFIGURACION_DE_QUIEN);
		html += this.getHTMLFormulario("Configuraci&oacute;n del Grupo");
		super.refrescando = this.estamosRefrescando();
		
		html += super.getHTMLGruposDeLaConfiguracion(this.grupos_configurando);
			
		html += this.getHTMLPrincipalEnFormatoTabla("Este grupo permite alumnos intergrupos");
		
		html += "\t  </form>\n";
		html += "\t</div>\n";
		
		return html;
	}
	
	
	private String getHTMLFormulario(String textos){
		String html = "";
		
		
		html += "\t    <fieldset>\n";
		html += "\t\t<legend>"+textos+"</legend>\n";
		html += "\n\t<div id=\"configuracionGrupos\">\n";
		html +="\t  <form method=\"post\" name=\""+TIPO_DE_FORMULARIO.CONFIGURACION_RECURSO_GRUPO+"\" action=\"\">\n";
		if(this.pagina.getParameter(PARAMETROS_PAGINAS.EXISTE_CAMBIO_EN_HERRAMIENTAS)==null || HelperHerramientas.seConfiguroHerramienta)
			html+= "         <input type=\"hidden\" name=\""+PARAMETROS_PAGINAS.EXISTE_CAMBIO_EN_HERRAMIENTAS+"\" value=\"0\">";
		else html+= "         <input type=\"hidden\" name=\""+PARAMETROS_PAGINAS.EXISTE_CAMBIO_EN_HERRAMIENTAS+"\" value=\""+this.pagina.getParameter(PARAMETROS_PAGINAS.EXISTE_CAMBIO_EN_HERRAMIENTAS)+"\">";
		
		html+= "         <input type=\"hidden\" name=\""+PARAMETROS_PAGINAS.ESTANDAR_NUEVO+"\" value=\"no\">";
		html+= "         <input type=\"hidden\" name=\""+PARAMETROS_PAGINAS.RECURSOS_QUITADOS+"\" value=\"no\">";
		
		return html;
	}
	
	private String getHTMLPrincipalEnFormatoTabla(String integracion) throws Exception{
		String html = "";
		
		html += "\n\t\t <table width=\"550\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
		html += "\t\t   <tr>\n";
		
		html += "\t\t     <td width=\"190\" valign=\"top\">\n";
		html += "\n\t\t <table width=\"190\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
		html += "\t\t   <tr>\n";
		
		html += "\t\t     <td>"+super.getHTMLHerramientas()+"</td>";
		
		html += "\t\t   </tr>\n";
		html += "\t\t </table>\n";
		html += "\t\t     </td>\n";
		
		html += "\t\t     <td width=\"350\">\n";
		html += "\n\t\t <table width=\"350\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
		html += "\t\t   <tr>\n";
		
		html += "\t\t     <td>\n"+super.getHTMLIntegrantes(this.grupos_configurando);
		html += "\t\t     </td>\n";
		html += "\t\t   </tr>\n";
		
		html += "\t\t   <tr>\n";
		html += "\t\t     <td>"+super.getHTMLMultigrupos(integracion,this.grupos_configurando)+"</td>";
		html += "\t\t   </tr>\n";
		
		html += "\t\t   <tr>\n";
		html += "\t\t     <td>\n"+super.getHTMLTipo();
		html += "\t\t     </td>\n";
		html += "\t\t   </tr>\n";
				
		html += "\t\t </table>\n";
		html += "\t\t     </td>\n";
		html += "\t\t   </tr>\n";
		
		html += "\t\t   <tr>\n";
		html += "\t\t     <td colspan=\"2\" width=\"550\">\n"+super.getHTMLInvitacion();
		html += "\t\t     </td>\n";
		html += "\t\t   </tr>\n";
		
		html += "\t\t   <tr>\n";
		html += "\t\t     <td colspan=\"2\" valign=\"top\" width=\"550\">\n"+super.getHTMLPermisosDeConsultaAlGrupo();
		html += "\t\t     </td>\n";
		html += "\t\t   </tr>\n";
		
		html += "\t\t   <tr>\n";
		html += "\t\t     <td colspan=\"2\" align=\"center\" valign=\"middle\" width=\"550\">\n"+super.getHTMLBotones(this.grupos_configurando);
		html += "\t\t     </td>\n";
		html += "\t\t   </tr>\n";
		
		html += "\t\t </table>\n";
		return html;
	}
	
	
	/**Controla si tengo que cargar los datos ya asignados (es decir, vengo a refrescar datos) o si este contenido muestra
	 * los datos iniciales (es decir, no necesito mantener informacion)*
	 * @throws Exception */
	private boolean estamosRefrescando() throws Exception{
		
		String refrescandoStr = this.pagina.getParameter(PARAMETROS_PAGINAS.REFRESCANDO_CONFIGURACION);
		ControlGrupo controlGrupo = new ControlGrupo(this.persistencia);
		boolean intercomision = ((Boolean)this.pagina.getSession().getAttribute(PARAMETROS_PAGINAS.INTERCOMISION)).booleanValue();
		
		//Si NO estoy refrescando limpio todo
		if(refrescandoStr == null){
			this.pagina.getSession().setAttribute(PARAMETROS_PAGINAS.TEXTOS_TEMAS_A_DICTAR,null);
			this.pagina.getSession().setAttribute(PARAMETROS_PAGINAS.CHECKBOX_GRUPOS_TEMAS_A_DICTAR,null);
			super.grupo_solo = null;
			grupos_configurando = null;
			super.grupoDeMuestra = null;
			super.grupoDeMuestra = this.cargandoGrupoALevantar_Generico_o_Estandar();
		}
		
		//Si viene desde Temas...
		String[] textos = this.pagina.getParameterValues(PARAMETROS_PAGINAS.TEXTOS_TEMAS_A_DICTAR);
		if(this.pagina.getParameterValues(PARAMETROS_PAGINAS.TEXTOS_TEMAS_A_DICTAR) != null){
			this.pagina.getSession().setAttribute(PARAMETROS_PAGINAS.TEXTOS_TEMAS_A_DICTAR,this.pagina.getParameterValues(PARAMETROS_PAGINAS.TEXTOS_TEMAS_A_DICTAR));
			this.pagina.getSession().setAttribute(PARAMETROS_PAGINAS.ID_TEMAS_A_DICTAR,this.pagina.getParameterValues(PARAMETROS_PAGINAS.ID_TEMAS_A_DICTAR));
			for(int i=0;i<textos.length;i++){
				this.pagina.getSession().setAttribute(PARAMETROS_PAGINAS.CHECKBOX_GRUPOS_TEMAS_A_DICTAR+i,this.pagina.getParameterValues(PARAMETROS_PAGINAS.CHECKBOX_GRUPOS_TEMAS_A_DICTAR+i));
			}
			
		}
		
		//Cargo el/los grupo/s que estoy configurando
		//.....Si vengo a configurar solo un Grupo
		if(super.configuracionDeQuien.compareTo(ACCIONES_A_REALIZAR.CONFIGURACION_DE_UN_SOLO_GRUPO)==0){
					super.grupo_solo = controlGrupo.getGrupo(this.pagina.getIdGrupo());
				//.....Si vengo a configurar el/los Grupo/s desde la interfaz inicial del Recurso Grupo (Tanto para Grupos con participantes y Grupos vacios)
		}else if(super.configuracionDeQuien.compareTo(ACCIONES_A_REALIZAR.CONFIGURACION_DE_LOS_GRUPOS_DEL_LISTADO)==0){
			//System.out.println("CONFIGURACION_DE_LOS_GRUPOS_DEL_LISTADO)");
	
				ControlAula controlAula = new ControlAula(this.persistencia);
				Vector comisiones = null;
				if(((String)this.pagina.getSession().getAttribute(PARAMETROS_PAGINAS.ESTADO_GRUPOS)).compareTo(ESTADO_GRUPOS.BORRADOR)==0){
					this.grupos_configurando = controlGrupo.getGruposDelAula(this.pagina.getIdAula(), ESTADO_GRUPOS.BORRADOR,false);
					this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(this.pagina.getIdAula(), ESTADO_GRUPOS.BORRADOR,null));
					comisiones = controlAula.getComisionesDelAula(this.pagina.getIdAula());
					for (Iterator i = comisiones.iterator(); i.hasNext();) {
						Comision comision = (Comision) i.next();
						this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(comision.getId(), ESTADO_GRUPOS.BORRADOR,null));
					}
				}else{
					this.grupos_configurando = controlGrupo.getGruposDelAula(this.pagina.getIdAula(), ESTADO_GRUPOS.VISIBLE,false);
					this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(this.pagina.getIdAula(), ESTADO_GRUPOS.VISIBLE,null));
					comisiones = controlAula.getComisionesDelAula(this.pagina.getIdAula());
					for (Iterator i = comisiones.iterator(); i.hasNext();) {
						Comision comision = (Comision) i.next();
						this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(comision.getId(), ESTADO_GRUPOS.VISIBLE,null));
					}
				}
			//.....Si vengo a configurar el/los Grupo/s desde la interfaz inicial del Recurso Grupo (Tanto para Grupos con participantes y Grupos vacios)
		}else if(super.configuracionDeQuien.compareTo(ACCIONES_A_REALIZAR.CONFIGURACION_DE_LOS_GRUPOS_DEL_NIVEL_UNICAMENTE)==0){
			//System.out.println("CONFIGURACION_DE_LOS_GRUPOS_DEL_NIVEL_UNICAMENTE)");
		  
				if(intercomision){
					if(((String)this.pagina.getSession().getAttribute(PARAMETROS_PAGINAS.ESTADO_GRUPOS)).compareTo(ESTADO_GRUPOS.BORRADOR)==0){
						this.grupos_configurando = controlGrupo.getGruposDelAula(this.pagina.getIdAula(),ESTADO_GRUPOS.BORRADOR,true);
						this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(this.pagina.getIdAula(), ESTADO_GRUPOS.BORRADOR,null));
					}else{
						this.grupos_configurando = controlGrupo.getGruposDelAula(this.pagina.getIdAula(),ESTADO_GRUPOS.VISIBLE,true);
						this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(this.pagina.getIdAula(), ESTADO_GRUPOS.VISIBLE,null));
						
					}
				}else{
					if(((String)this.pagina.getSession().getAttribute(PARAMETROS_PAGINAS.ESTADO_GRUPOS)).compareTo(ESTADO_GRUPOS.BORRADOR)==0){
						this.grupos_configurando = controlGrupo.getGruposSoloDeLaComision(this.pagina.getIdComision(),false,ESTADO_GRUPOS.BORRADOR);
						this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(this.pagina.getIdComision(), ESTADO_GRUPOS.BORRADOR,null));
					}else{
						this.grupos_configurando = controlGrupo.getGruposSoloDeLaComision(this.pagina.getIdComision(),false, ESTADO_GRUPOS.VISIBLE);
						this.grupos_configurando.addAll(controlGrupo.getGruposSinParticipantes(this.pagina.getIdComision(), ESTADO_GRUPOS.VISIBLE,null));
					}
				}
	
		}
		if(refrescandoStr == null) return false;
		else return true;
		
	}
	
	
	
	/** Si hay que levantar los datos ya que todo los grupos que estamos configurando poseen mismos datos, obtener
	 * en un grupo esos datos y retornarlo, asi luego vamos msotrando sus respectivos datos consultando tal grupo.
	 *  Sino, retornamos nulo, asi al consultar sabemos que si es nulo debemos mostrar los datos estandar.
	 *   
	 * @return null o grupo
	 * @throws Exception 
	 */
	private Grupo cargandoGrupoALevantar_Generico_o_Estandar() throws Exception{
		/*LEVANTAR DTAOS GENERALES, AL MENOS LOS POSIBLES, SINO ESTANDAR*/
		boolean intercomision = ((Boolean)this.pagina.getSession().getAttribute(PARAMETROS_PAGINAS.INTERCOMISION)).booleanValue();
		ControlGrupo controlGrupo = new ControlGrupo(this.persistencia);
		Grupo grupoRetorno = null;
		Grupo grupoConcreto = null;
		Long idConcreto = null;
		ControlConfiguracionGralHome controlConfiguracionGral = new ControlConfiguracionGralHome(this.persistencia);
		boolean esDeTodos = false;
		Vector grupos = null;//obtengo el vector de grupos segun consulta, para luego obtener un solo grupo, el concreto
		String estado = (String)this.pagina.getSession().getAttribute(PARAMETROS_PAGINAS.ESTADO_GRUPOS);
		
		idConcreto = this.pagina.getIdAula();
		if(this.pagina instanceof PaginaComision)idConcreto = this.pagina.getIdComision();
		 
		if(super.configuracionDeQuien.compareTo(ACCIONES_A_REALIZAR.CONFIGURACION_DE_UN_SOLO_GRUPO)==0){
			  //System.out.println("LEVANTAR CONFIGURACION SI LA TENIA.....HERRAMIENTAS");
			  return controlGrupo.getGrupo(this.pagina.getIdGrupo());
		  }else{
			  //System.out.println("CARGANDO HERRAMIENTAS GENERICAS....");			  
				  if(super.configuracionDeQuien.compareTo(ACCIONES_A_REALIZAR.CONFIGURACION_DE_LOS_GRUPOS_DEL_LISTADO)==0){
					  esDeTodos = true;
					  if(controlConfiguracionGral.consultaConfiguracionGralTodos_HayAlgoGral(idConcreto,estado).equals(TIPO_CONFIGURACION_DE_GRUPOS.GENERAL)){
						  grupos = controlGrupo.getGruposDelAula(idConcreto,estado,false);
						  if(grupos.isEmpty())
							  grupos = controlGrupo.getGruposSinParticipantes(this.pagina.getIdAula(),estado,null);
						  grupoConcreto = (Grupo)grupos.firstElement();
						  
						  //System.out.println("..............DEL HOME, TODOS....GENERICO");
					  }else{
						  //System.out.println("..............DEL HOME, TODOS....PARTICULAR");
						  return null;
					  }		
				  }else{
					  if(controlConfiguracionGral.consultaConfiguracionGralHome_HayAlgoGral(idConcreto,estado).equals(TIPO_CONFIGURACION_DE_GRUPOS.GENERAL)){
						  if(intercomision){
							  grupos = controlGrupo.getGruposDelAula(this.pagina.getIdAula(),estado,true);
							  
							  if(grupos.isEmpty())
								  grupos = controlGrupo.getGruposSinParticipantes(this.pagina.getIdAula(),estado,null);
							  grupoConcreto = (Grupo)grupos.firstElement();
							  
							 // System.out.println("..............DEL HOME, AULA....GENERICO");
						  }else{
							  grupos = controlGrupo.getGruposSoloDeLaComision(this.pagina.getIdComision(),false,estado);
							  if(grupos.isEmpty())
								  grupos = controlGrupo.getGruposSinParticipantes(this.pagina.getIdComision(),estado,null);
							  if(grupos.isEmpty()){
								  grupos = controlGrupo.getGruposDelAula(this.pagina.getIdAula(),estado,true);
							  }
							  grupoConcreto = (Grupo)grupos.firstElement();
							 // System.out.println("..............DEL HOME, COMISION....GENERICO");
						  }
					  }else{
						  //System.out.println("..............DEL HOME, AULA O COMISION....PARTICULAR");
						  return null;
					  }
				  }
		  }
		grupoRetorno = controlConfiguracionGral.levantandoConfiguracion(idConcreto,grupoConcreto,estado,esDeTodos);
		return grupoRetorno;
	}	
}